package com.itlong.cloud.operate.dao;

import com.itlong.cloud.POJO.PO.AppFunctionInfoPO;
import com.itlong.cloud.POJO.PO.AppServeProjectPO;
import com.itlong.cloud.POJO.PO.PropertyRoleFunctionPO;
import com.itlong.cloud.POJO.VO.app.AppFunctionInfoVO;
import com.itlong.cloud.abstracts.IAbstractBaseDao;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * <desc>
 *      运营-App-功能管理数据访问接口实现类
 * </desc>
 *
 * @createDate 2017/09/29
 */
@Mapper
@Repository
public interface
        IOperateAppFunctionInfoDao extends IAbstractBaseDao<AppFunctionInfoPO>{
    /**
     * <desc>
     *      保存功能
     * </desc>
     *
     * @param params 数据参数
     * @return sql执行行数
     * @author Jiaqi.X
     * @createDate 2017/09/30
     */
    Integer save(Map<String,Object> params);
    /**
     * <desc>
     *      修改功能
     * </desc>
     *
     * @param params 数据参数
     * @return 执行行数
     * @author Jiaqi.X
     * @createDate 2017/09/30
     */
    Integer update(Map<String,Object> params);
    /**
     * <desc>
     *      获取分页数据集
     * </desc>
     *
     * @param params 查询参数
     * @return  分页数据集
     * @author Jiaqi.X
     * @createDate 2017/09/30
     */
    List<AppFunctionInfoPO> getPage(Map<String,Object> params);
    /**
     * <desc>
     *      获取分页总数量
     * </desc>
     *
     * @param params 查询参数
     * @return 总数量
     * @author Jiaqi.X
     * @createDate 2017/09/21
     */
    Integer getPageCount(Map<String,Object> params);

    /**
     * <desc>
     *      删除
     * </desc>
     *
     * @param appFunctionIds 资源id数组
     * @return sql执行行数
     * @author Jiaqi.X
     * @createDate 2017/09/21
     */
    Integer delete(@Param("appFunctionIds")String[] appFunctionIds,@Param("updateTime") Date updateTime);

    /**
     * <desc>
     *      根据父节点id获取子节点集合
     * </desc>
     *
     * @param appFunctionId 资源id
     * @param type 类型 1列表 2权限
     * @return 子级结果数据集
     * @author Jiaqi.X
     * @createDate 2017/09/30
     */
    List<AppFunctionInfoVO> getChildsByParent(@Param("appFunctionId")String appFunctionId,@Param("type")Integer type);

    /**
     * <desc>
     *      通过套餐id获取所有的功能
     * </desc>
     * @param appPackageId 套餐id
     * @return
     * @author Jiaqi.X
     * @createDate 2017/09/30
     */
    List<String> getAppPackageFunctions(@Param("appPackageId") String appPackageId);

    /**
     * <desc>
     *      通过套餐id删除该套餐拥有的所有节点
     * </desc>
     *
     * @param appPackageId 套餐id
     * @return
     * @author Jiaqi.X
     * @createDate 2017/09/30
     */
    Integer deleteRoleFunctions(@Param("appPackageId") String appPackageId);


    /**
     * <desc>
     *      获取当前功能节点的所有同级别节点
     * </desc>
     *
     * @param parent 功能id
     * @return
     * @author Jiaqi.X
     * @createDate 2017/09/30
     */
    List<AppFunctionInfoPO> getParentLevelFunctions(@Param("parent")String parent);

    /**
     * <desc>
     *      获取父级资源
     * </desc>
     *
     * @param parent 功能id
     * @return
     * @author Jiaqi.X
     * @createDate 2017/09/30
     */
    AppFunctionInfoPO getParent(@Param("parent")String parent);

    /**
     * <desc>
     *      套餐分配功能
     * </desc>
     *
     * @param appFunctionIds 功能id数组
     * @param appPackageId 套餐id
     * @return
     * @author Jiaqi.X
     * @createDate 2017/11/01
     */
    Integer allotFunction(@Param("appFunctionIds")String[] appFunctionIds,
                          @Param("appPackageId")String appPackageId,
                          @Param("systemType")Integer systemType,
                          @Param("status")Integer status,
                          @Param("createTime")Date createTime);

    /**
     * <desc>
     *      获取APP配置信息 供APP使用
     * </desc>
     *
     * @param projectId 项目id
     * @return
     * @author Jiaqi.X
     * @createDate 2017/11/02
     */
    List<AppFunctionInfoPO> getAppConfig(@Param("projectId")String projectId);

    /**
     * <desc>
     *      APP获取所有配置信息
     * </desc>
     *
     * @return
     * @author Jiaqi.X
     * @createDate 2018/04/20
     */
    List<AppFunctionInfoPO> getAppList();

    /**
     * <desc>
     *      获取默认菜单
     * </desc>
     *
     * @return
     * @author Jiaqi.X
     * @createDate 2018/04/24
     */
    List<String> getDefaultFunctions();

    /**
     * <desc>
     *      获取小程序默认菜单
     * </desc>
     *
     * @param
     * @return
     * @Author Zhu.yj
     * @createDate  2020/3/23
     */
    List<String> getMiniDefaultFunctions();

    /**
     * <desc>
     *      获取项目绑定套餐下的菜单id列表
     * </desc>
     *
     * @param projectId 项目id
     * @return
     * @Author Zhu.yj
     * @createDate  2021/5/10
     */
    List<String> getFunctionByProjectId(@Param("projectId") String projectId);

    /**
     * <desc>
     *      删除用户项目下指定的菜单
     * </desc>
     *
     * @param params 删除条件
     * @return
     * @Author Zhu.yj
     * @createDate  2021/5/10
     */
    Integer deleteUserFunctions(Map<String, Object> params);

    /**
     * <desc>
     *      批量保存角色功能
     * </desc>
     *
     * @param list
     * @return
     * @Author Zhu.yj
     * @createDate  2021/5/10
     */
    Integer batchSaveRoleFunction(List<PropertyRoleFunctionPO> list);

    /**
     * <desc>
     *      获取未绑定套餐的项目
     * </desc>
     *
     * @param
     * @return
     * @Author Zhu.yj
     * @createDate  2021/5/12
     */
    List<String> getNotPackageProject();

    /**
     * <desc>
     *      批量保存app套餐服务的项目数据
     * </desc>
     *
     * @param list
     * @return
     * @Author Zhu.yj
     * @createDate  2021/5/12
     */
    Integer batchSaveAppServeProject(List<AppServeProjectPO> list);
}
